package qplayas

import grails.converters.*

/**
 * Controlador que se encarga de la mayoria de acciones para encontrar y mostrar la
 * informacion sobre una playa en la parte de acceso a usuarios.
 * 
 * */
class SearchController {

	/* Servicio para obtener info sobre la playa */
	def geoPointService

	/* 
	 * Busca la localizacion del termino ya sea parte del nombre o de la localidad y 
	 * tiene en cuenta la paginacion que se devuelve de la pagina. Devuelve una 
	 * template ya que estamos utilizando ajax para recargar fragmentos.
	 * */
	def searchLocations = {
		def playas = []
		def offset = params.offset ? params.offset : 0
		def max = 5
		def total
		def searchResult
		/** Obtenemos la posicion de la playa **/
		if(params.nombre){
			searchResult =  geoPointService.getGeoPointByName(params.nombre,[max:max,offset:offset])
			total = searchResult.total
			playas = searchResult.results
		}
		render(
				template:'/templates/results',
				model:[
					playa: playas,
					max: max,
					term:params.nombre,
					offset: offset,
					total: total
				]
				)
	}

	/* Devuelve la template encargada de mostrar el detalle de la playa. Al utilizar
	 * ajax solamente se actualiza una zona de la pagina */
	def showDetail = {
		render(
				template:'/templates/detail',
				model:[playa: Playa.get(params.id)])
	}

	/* Controlador que puede ser usado como servicio rest */
	def showPoint = {
		def result = null
		def playa = Playa.get(params.id)
		if(playa){
			result = [lat:playa.posicion.latitud,lon:playa.posicion.longitud]
		}
		render result as JSON
	}
	/* Devuelve una lista de sugerencias */
	def searchAJAX = {
		def playas = Playa.findAllByNombreIlike("%${params.query}%")
		//Create XML response
		render(contentType: "text/xml") {
			results() {
				playas.each { beach ->
					result(){ name(beach.nombre) }
				}
			}
		}
	}

}
